package string;


import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

/*
* Steomg不适合频繁修改
* 为了解决这个问题，java提供了一个用于修改字符串API：StringBuilder
* StringBuilder内部维护一个可变的char数组，
* 修改性能高，开销小，提供了便于修改字符串的相关操作:增删改查等
* */
public class StringBuilderDemo {
    public static void main(String[] args) {
        String str="好好学习java";
        //创建StringBuilder常见的构造器
        //StringBuilder builder=new StringBuilder();
        //创建StringBuilder的同时同时复制一部分内容到内部
        StringBuilder builder=new StringBuilder(str);
        //StringBuffer是并发安全的

        /*
        增
        好好学习java
           v
        好好学习java，为了找个好工作
         */
        builder.append(",为了找个好工作！");
        System.out.println(str);//String是不变对象，内容没有发生改变
        System.out.println(builder);//改变的是StringBuilder内部的字符串内容

        /*
        改
        好好学习java，为了找个好工作!
                     ^          ^
                  v
        好好学习java，就是为了改变世界！
         */
        //将builder内部字符串从下标9开始到16（不含）的内容替换为给定的字符串
        builder.replace(9,16,"就是为了改变世界");
        System.out.println(builder);

        /*
        删
        好好学习java，就是为了改变世界！
                   v
        ，就是为了改变世界
         */
        builder.delete(0,8);
        System.out.println(builder);

        /*
        插入
        ，就是为了改变世界
              v
        活着，就是为了改变世界
         */
        //将给定内容插入到到指定位置
        builder.insert(0,"活着");
        System.out.println(builder);

        //反转字符串内容
        builder.reverse();
        System.out.println(builder);

        /*
        StringBuilder只是修改字符串的工具类，并调用toString本身。
        当使用StringBuilder修改内容后，可以调用toString方法得到内部的字符串内容。
         */
        String line=builder.toString();
        System.out.println(line);



    }
}
